package net.nicoll.scratch.spring.boot.jms.sync;
import javax.jms.ConnectionFactory;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.integration.jms.JmsOutboundGateway;
import org.springframework.jms.connection.CachingConnectionFactory;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
import org.springframework.jms.listener.adapter.MessageListenerAdapter;
import org.springframework.messaging.MessageChannel;
/**
* @author Gary Russell
*/
@EnableAutoConfiguration
@EnableIntegration
@IntegrationComponentScan
@Configuration
public class JmsRequestReply {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = new SpringApplication(JmsRequestReply.class).run();
ClientGateway gateway = ctx.getBean(ClientGateway.class);
System.out.println("--------- Sending foo and waiting for reply --------");
System.out.println(gateway.sendAndReceive("foo"));
System.out.println("----------------------------------------------------");
ctx.close();
}
@MessagingGateway(defaultRequestChannel = "requests")
public interface ClientGateway {
String sendAndReceive(String toSend);
}
@Bean
public MessageChannel requests() {
return new DirectChannel();
}
@Bean
@ServiceActivator(inputChannel = "requests")
public JmsOutboundGateway jmsGateway() {
JmsOutboundGateway gateway = new JmsOutboundGateway();
gateway.setConnectionFactory(connectionFactory());
gateway.setRequestDestinationName("test.out");
gateway.setReplyDestinationName("test.in");
gateway.setCorrelationKey("JMSCorrelationID");
return gateway;
}
@Bean
public ConnectionFactory connectionFactory() {
return new CachingConnectionFactory(
new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"));
}
@Bean
public DefaultMessageListenerContainer responder() {
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setDestinationName("test.out");
MessageListenerAdapter adapter = new MessageListenerAdapter(new Object() {
@SuppressWarnings("unused")
public String handleMessage(String in) {
return in.toUpperCase();
}
});
container.setMessageListener(adapter);
return container;
}
}